package tela;

import ferramentas.Query;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pessoal.Cursista;
import pessoal.Usuario;

/**
 *
 * @author ciar
 */
public class formularioInscricao extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    private String montarEscolaridade(String[] escolaridades, String outro) {
        String result = "";
        if (escolaridades != null) {
            for (String escolaridade : escolaridades) {
                result += escolaridade + "|";
            }
        }
        if (result.contains("outro")) {
            result += outro;
        }

        return result;
    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        Query q = new Query();
        //2 para cursista - 1 para tutor e orientador
        //4 para Orientador - 2 para cursista - 3 para Tutor - 1 para tutor/orientador
        int tipo = Integer.parseInt(request.getParameter("tipo"));
        Usuario u = (Usuario) request.getSession().getAttribute("usuario");

        int numeroCurso = Integer.parseInt(request.getParameter("curso"));


        boolean inscricao_valida = validaInscricao(u, numeroCurso, out);

        if (inscricao_valida) {
            if (tipo == 1) {//tutor ou orientador
           /*     String curriculo = request.getParameter("curriculo");
                 String questao = request.getParameter("questao");

                 curriculo = curriculo.replaceAll("'", "").replace("\"", "");
                 questao = questao.replaceAll("'", "").replace("\"", "");

                 String outro = request.getParameter("outro");
                 String[] escolaridades = request.getParameterValues("escolaridade");
                 String escolaridade = montarEscolaridade(escolaridades, outro); */

                int numeroPolo = Integer.parseInt(request.getParameter("polo"));

                String tutorOrientador = request.getParameter("tutor_orientador");
                String linkLattes = request.getParameter("lattes");
                try {
                    //Retirada essas informações no ato da inscrição
                    //q.inserirInscricao(u, numeroCurso, curriculo, questao, numeroPolo, tutorOrientador, escolaridade);
                    q.inserirInscricao(u, numeroCurso, "", "", numeroPolo, tutorOrientador, "", linkLattes);

                    out.println("Inscrição realizada com sucesso. Voltar à <a href='index.jsp?conteudo=inscricoes'>página de inscrições</a> para imprimir seu comprovante. <script>window.alert('Inscrição realizada com sucesso.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricoes");

                } catch (Exception ex) {
                    out.println("Sua inscrição não pode ser realizada por um dos seguintes motivos: <br />-Formulário não foi preenchido corretamente.<br />-Você pode já estar inscrito para esse curso.<script>window.alert('Sua inscrição não pode ser realizada.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricao&curso=" + numeroCurso + "&tipo=" + t + "");


                }
            } else if (tipo == 2) { //cursista
                String curriculo = "";
                String questao = "";
                if (numeroCurso == 124 || numeroCurso == 155) {
                    curriculo = request.getParameter("curriculo");
                    questao = request.getParameter("questao");

                    curriculo = curriculo.replaceAll("'", "").replace("\"", "");
                    questao = questao.replaceAll("'", "").replace("\"", "");
                }


                int numeroPolo = Integer.parseInt(request.getParameter("polo"));

                try {
                    //Retirada as informações da questão e currículo no ato da inscrição
                    q.inserirInscricao(u, numeroCurso, numeroPolo, curriculo, questao, "");
                    out.println("Inscrição realizada com sucesso. Voltar à <a href='index.jsp?conteudo=inscricoes'>página de inscrições</a> para imprimir seu comprovante. <script>window.alert('Inscrição realizada com sucesso.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricoes");


                } catch (Exception ex) {
                    out.println("Sua inscrição não pode ser realizada por um dos seguintes motivos: <br />-Formulário não foi preenchido corretamente.<br />-Você pode já estar inscrito para esse curso.<script>window.alert('Sua inscrição não pode ser realizada.');self.location='index.jsp?conteudo=inscricoes';</script>");

                }
            } else if (tipo == 3) { //Tutor
               /* String curriculo = request.getParameter("curriculo");
                 String questao = request.getParameter("questao");

                 curriculo = curriculo.replaceAll("'", "").replace("\"", "");
                 questao = questao.replaceAll("'", "").replace("\"", "");

                 String outro = request.getParameter("outro");
                 String[] escolaridades = request.getParameterValues("escolaridade");
                 String escolaridade = montarEscolaridade(escolaridades, outro); */

                int numeroPolo = Integer.parseInt(request.getParameter("polo"));

                String tutorOrientador = request.getParameter("tutor_orientador");
                String linkLattes = request.getParameter("lattes");
                try {
                    //Retirada as informações da questão, currículo e escolaridade no ato da inscrição
                    //q.inserirInscricao(u, numeroCurso, curriculo, questao, numeroPolo, tutorOrientador, escolaridade);
                    q.inserirInscricao(u, numeroCurso, "", "", numeroPolo, tutorOrientador, "", linkLattes);

                    out.println("Inscrição realizada com sucesso. Voltar à <a href='index.jsp?conteudo=inscricoes'>página de inscrições</a> para imprimir seu comprovante. <script>window.alert('Inscrição realizada com sucesso.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricoes");

                } catch (Exception ex) {
                    out.println("Sua inscrição não pode ser realizada por um dos seguintes motivos: <br />-Formulário não foi preenchido corretamente.<br />-Você pode já estar inscrito para esse curso.<script>window.alert('Sua inscrição não pode ser realizada.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricao&curso=" + numeroCurso + "&tipo=" + t + "");

                }
            } else if (tipo == 4) { //Orientador
                /*String curriculo = request.getParameter("curriculo");
                 String questao = request.getParameter("questao");

                 curriculo = curriculo.replaceAll("'", "").replace("\"", "");
                 questao = questao.replaceAll("'", "").replace("\"", "");

                 String outro = request.getParameter("outro");
                 String[] escolaridades = request.getParameterValues("escolaridade");
                 String escolaridade = montarEscolaridade(escolaridades, outro); */

                int numeroSede = Integer.parseInt(request.getParameter("cidade_sede"));

                String tutorOrientador = request.getParameter("tutor_orientador");
                String linkLattes = request.getParameter("lattes");
                try {
                    //Retirada as informações da questão, currículo e escolaridade no ato da inscrição
                    //q.inserirInscricaoOrientador(u, numeroCurso, curriculo, questao, numeroSede, tutorOrientador, escolaridade);
                    q.inserirInscricaoOrientador(u, numeroCurso, "", "", numeroSede, tutorOrientador, "", linkLattes);

                    out.println("Inscrição realizada com sucesso. Voltar à <a href='index.jsp?conteudo=inscricoes'>página de inscrições</a> para imprimir seu comprovante. <script>window.alert('Inscrição realizada com sucesso.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricoes");

                } catch (Exception ex) {
                    out.println("Sua inscrição não pode ser realizada por um dos seguintes motivos: <br />-Formulário não foi preenchido corretamente.<br />-Você pode já estar inscrito para esse curso.<script>window.alert('Sua inscrição não pode ser realizada.');self.location='index.jsp?conteudo=inscricoes';</script>");
                    //response.sendRedirect(request.getContextPath() + "/index.jsp?conteudo=inscricao&curso=" + numeroCurso + "&tipo=" + t + "");

                }
            }
        } else { // Já está inscrito
            out.println("Não é possível realizar outra inscrição. Você já está inscrito para esse curso.<script>window.alert('Você já está inscrito nesse curso. Inscrição não realizada.');self.location='index.jsp?conteudo=inscricoes';</script>");


        }
    }
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);


        } catch (SQLException ex) {
            Logger.getLogger(formularioInscricao.class
                    .getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);


        } catch (SQLException ex) {
            Logger.getLogger(formularioInscricao.class
                    .getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    public boolean validaInscricao(Usuario aluno, int numero_curso, PrintWriter out) {

        Query q = new Query();
        boolean estaInscrito = false;
        try {
            estaInscrito = q.isAlunoInscrito(aluno, numero_curso);
        } catch (SQLException ex) {
            System.out.println("Problemas de pesquisa na base de dados.");
            out.println("<script>");
            out.println("window.alert('Problemas de pesquisa na base de dados')");
            out.println("</script>");
        }
        return !estaInscrito;
    }
}
